GtkTextDisplay: Use pango renderer alpha support
authorMatthias Clasen <mclasen@redhat.com>
Wed, 12 Aug 2015 01:25:51 +0000 (21:25 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 15 Aug 2015 03:42:48 +0000 (23:42 -0400)
We don't need to store our own copy of the colors anymore,
now that PangoRenderer can do alpha.

gtk/gtktextdisplay.c

index f8178018800cc86e728ed914ef000ab2b67e4e18..c2e911ad6423fb7e512e60d4292df5cb4b7846ff 100644 (file)
@@ -107,13 +107,10 @@ struct _GtkTextRenderer
 
   GtkWidget *widget;
   cairo_t *cr;
-  
+
   GdkRGBA *error_color;        /* Error underline color for this widget */
   GList *widgets;              /* widgets encountered when drawing */
 
-  GdkRGBA rgba[4];
-  guint8  rgba_set[4];
-
   guint state : 2;
 };
 
@@ -132,17 +129,23 @@ text_renderer_set_rgba (GtkTextRenderer *text_renderer,
                        const GdkRGBA   *rgba)
 {
   PangoRenderer *renderer = PANGO_RENDERER (text_renderer);
-  PangoColor     dummy = { 0, };
+  PangoColor color = { 0, };
+  guint16 alpha;
 
   if (rgba)
     {
-      text_renderer->rgba[part] = *rgba;
-      pango_renderer_set_color (renderer, part, &dummy);
+      color.red = (guint16)(rgba->red * 65535);
+      color.green = (guint16)(rgba->green * 65535);
+      color.blue = (guint16)(rgba->blue * 65535);
+      alpha = (guint16)(rgba->alpha * 65535);
+      pango_renderer_set_color (renderer, part, &color);
+      pango_renderer_set_alpha (renderer, part, alpha);
     }
   else
-    pango_renderer_set_color (renderer, part, NULL);
-
-  text_renderer->rgba_set[part] = (rgba != NULL);
+    {
+      pango_renderer_set_color (renderer, part, NULL);
+      pango_renderer_set_alpha (renderer, part, 0);
+    }
 }
 
 static GtkTextAppearance *
@@ -267,10 +270,22 @@ static void
 set_color (GtkTextRenderer *text_renderer,
            PangoRenderPart  part)
 {
+  PangoColor *color;
+  GdkRGBA rgba;
+  guint16 alpha;
+
   cairo_save (text_renderer->cr);
 
-  if (text_renderer->rgba_set[part])
-    gdk_cairo_set_source_rgba (text_renderer->cr, &text_renderer->rgba[part]);
+  color = pango_renderer_get_color (PANGO_RENDERER (text_renderer), part);
+  alpha = pango_renderer_get_alpha (PANGO_RENDERER (text_renderer), part);
+  if (color)
+    {
+      rgba.red = color->red / 65535.;
+      rgba.green = color->green / 65535.;
+      rgba.blue = color->blue / 65535.;
+      rgba.alpha = alpha / 65535.;
+      gdk_cairo_set_source_rgba (text_renderer->cr, &rgba);
+    }
 }
 
 static void